home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / packet / p_aa4re / bb212src / bbtinit.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-12-14  |  7.2 KB  |  243 lines

  1. (*===========================================================================*)
  2. (* Procedure for initializing the TNCs                                       *)
  3. (*                                                                           *)
  4. (*   Copyright 1988, 1989, 1990, 1991 by H. Roy Engehausen.  All rights      *)
  5. (*   reserved.                                                               *)
  6. (*                                                                           *)
  7. (*===========================================================================*)
  8.  
  9. {$DEFINE DEBUG_TINIT}
  10. {$DEFINE DEBUG_BPQHOST1}
  11. {$UNDEF  DEBUG_TINIT}
  12. {$UNDEF  DEBUG_BPQHOST1}
  13.  
  14. (*===========================================================================*)
  15. (* Shared subroutines                                                        *)
  16. (*===========================================================================*)
  17.  
  18. PROCEDURE gc;
  19.  
  20.   VAR
  21.     t_str : STRING;
  22.  
  23.   BEGIN;
  24.  
  25.     REPEAT
  26.       t_str := garbage_collect_tnc;
  27.       IF t_str <> '' THEN
  28.         window_write(active_port^.port_char + 'G:', t_str);
  29.     UNTIL t_str = '';
  30.  
  31.     IF active_port^.port_type <> port_modem THEN
  32.       EXIT;
  33.  
  34.     IF active_tcb^.tnc_tth^.data67_count > 0 THEN
  35.       BEGIN;
  36.         MOVE(active_tcb^.tnc_tth^.data67[1], t_str[1],
  37.                                             active_tcb^.tnc_tth^.data67_count);
  38.         window_write(active_port^.port_char + 'G:', t_str);
  39.       END;
  40.  
  41.     IF active_tcb^.tnc_data.str_data <> '' THEN
  42.       window_write(active_port^.port_char + 'G:',
  43.                                                 active_tcb^.tnc_data.str_data);
  44.  
  45.   END;
  46.  
  47. PROCEDURE cmd_it(s : STRING);
  48.   BEGIN;
  49.     cmd_tnc(@s, TRUE);
  50.   END;
  51.  
  52. PROCEDURE modem_cmd(s : STRING);
  53.   BEGIN;
  54.     send_tnc_data_str('AT' + s + cr);
  55.     send_flush;
  56.     DELAY(100);
  57.     gc;
  58.   END;
  59.  
  60. (*===========================================================================*)
  61. (* Initialize the TNCS                                                       *)
  62. (*===========================================================================*)
  63.  
  64. PROCEDURE tinit;
  65.  
  66.   CONST debug = FALSE;
  67.  
  68.   VAR
  69.     f             : TEXT;
  70.     i             : WORD;
  71.     r             : REGISTERS;
  72.     save_color    : BYTE;
  73.     t_str         : STRING;
  74.  
  75.   {$I BBTINITF.PAS}        (* Initialize TNC with file *)
  76.   {$I BBTINITT.PAS}        (* Actually initialize TNC  *)
  77.  
  78.   BEGIN;
  79.  
  80.   save_color := active_tcb^.w_color;
  81.  
  82.   (*-------------------------------------------------------------------------*)
  83.   (* Start with first port                                                   *)
  84.   (*-------------------------------------------------------------------------*)
  85.  
  86.   active_port := ring_port;
  87.  
  88.   (*-------------------------------------------------------------------------*)
  89.   (* Loop thru all ports                                                     *)
  90.   (*-------------------------------------------------------------------------*)
  91.  
  92.   REPEAT
  93.  
  94.     {$IFDEF DEBUG_TINIT}
  95.       WRITELN('INIT of COM ', active_port^.com_number);
  96.     {$ENDIF}
  97.  
  98.     active_tcb^.tcb_port := active_port;
  99.  
  100.     IF (active_port^.port_type <> port_pcpa)
  101.                              AND (active_port^.port_type <> port_bpqhost) THEN
  102.       BEGIN;
  103.         r.AH := 4;
  104.         r.DX := active_port^.com_number - 1;
  105.         INTR(tnc_interrupt, r);
  106.         IF r.AX <> $AA55 THEN
  107.           BEGIN;
  108.             WRITELN;
  109.             WRITELN('***** ERROR *****');
  110.             WRITELN('MBBIOS not active for COM', active_port^.com_number);
  111.             RUNERROR(mbbios_not_found);
  112.           END;
  113.       END;
  114.  
  115.     init_this_tnc;
  116.  
  117.     active_port := active_port^.next_port;
  118.  
  119.   UNTIL active_port = ring_port;
  120.  
  121.   (*-------------------------------------------------------------------------*)
  122.   (* Tell user we are done                                                   *)
  123.   (*-------------------------------------------------------------------------*)
  124.  
  125.   window_write('', 'TNCs are initialized');
  126.  
  127.   active_tcb^.w_color := save_color;
  128.  
  129. END;
  130.  
  131. (*===========================================================================*)
  132. (* Close the TNCs                                                            *)
  133. (*===========================================================================*)
  134.  
  135. PROCEDURE tclose;
  136.   VAR
  137.     i             : BYTE;
  138.     r             : REGISTERS;
  139.     save_color    : BYTE;
  140.  
  141.   BEGIN;
  142.  
  143.     (*-----------------------------------------------------------------------*)
  144.     (* Save color                                                            *)
  145.     (*-----------------------------------------------------------------------*)
  146.  
  147.     save_color := active_tcb^.w_color;
  148.  
  149.     (*-----------------------------------------------------------------------*)
  150.     (* Loop thru all the TNCS                                                *)
  151.     (*-----------------------------------------------------------------------*)
  152.  
  153.     active_port := ring_port;
  154.  
  155.     REPEAT
  156.  
  157.       WITH active_tcb^, active_port^ DO
  158.         BEGIN;
  159.  
  160.           tcb_port := active_port;
  161.           w_color  := port_color;
  162.  
  163.           FOR i := 1 TO max_chan DO
  164.             connected^[i] := NIL;
  165.  
  166.           channel := 0;
  167.           port_chan_s := port_char + '0';
  168.  
  169.           IF NOT port_sub_port THEN
  170.             BEGIN;
  171.  
  172.               FILLCHAR(tnc_data, SIZEOF(tnc_data), 0);
  173.               FILLCHAR(tnc_htt^, tnc_b_size, 0);
  174.  
  175.               CASE port_type OF
  176.  
  177.                 port_aeapk232, port_g8bpq :
  178.                   BEGIN;
  179.                     cmd_it('MN0');
  180.                     cmd_it('MC0');
  181.  
  182.                     cmd_it('MN');
  183.  
  184.                     cmd_it('UR0');
  185.                     cmd_it('CFNONE');
  186.                   END;
  187.  
  188.                 port_bpqhost, port_modem :
  189.                   ;
  190.  
  191.                 ELSE
  192.                   BEGIN;
  193.                     cmd_it('MN');
  194.  
  195.                     cmd_it('M');
  196.  
  197.                     cmd_it('Y0');
  198.                   END;
  199.  
  200.               END; (*----- End port type case statement ---------------------*)
  201.  
  202.               FOR i := 0 TO max_chan DO
  203.                 BEGIN;
  204.  
  205.                   channel := i;
  206.  
  207.                   port_chan_s := port_char + byte_to_char[i];
  208.  
  209.                   IF i <> 0 THEN
  210.                     cmd_tnc(@disc_cmd, TRUE);
  211.  
  212.                   IF port_type = port_bpqhost THEN
  213.                     BEGIN;
  214.                       r.AH := bpq_open;
  215.                       r.AL := i + 1;
  216.                       r.CL := 0;
  217.                       r.DL := 0;
  218.                       INTR(com_number, r);
  219.                     END;
  220.  
  221.                   IF port_type = port_modem THEN
  222.                     DELAY(200);
  223.  
  224.                   REPEAT
  225.  
  226.                     send_recv_tnc(2);
  227.                     IF NOT tnc_null THEN
  228.                       window_write('', tnc_data.str_data);
  229.  
  230.                   UNTIL tnc_null;
  231.  
  232.                 END; (*----- End channel loop -------------------------------*)
  233.  
  234.             END; (*----- End sub port check ---------------------------------*)
  235.  
  236.         END; (*----- End addressing -----------------------------------------*)
  237.  
  238.       active_port := active_port^.next_port;
  239.  
  240.     UNTIL active_port = ring_port;
  241.  
  242.   END;
  243.